#ifndef BREAKTHROUGHGAMESMALLER_H
#define BREAKTHROUGHGAMESMALLER_H

#include <Game.h>

/** \class BreakthroughGameSmaller
*	\brief A BreakthroughGameSmaller class
*	\details A class that extends from Game and defines the Breakthrough game with an 6x6 board.
*/
class BreakthroughGameSmaller : public Game
{
    public:
        /** \brief Breakthrough Smaller constructor
        *
        * Constructs the game. Calls setBoard().
        */
        BreakthroughGameSmaller();

        virtual ~BreakthroughGameSmaller();

        /** \brief Set Board
        *
        * Sets the board with 6 pieces for each player on opposite sides.
        */
        void setBoard();

        /** \brief Display board
        *
        * Uses Game::displayBoard() and displays additional debug information if debugging is on.
        */
        virtual void displayBoard();

        /** \brief Start
        *
        * Displays a welcome message, initializes the game and starts it.
        */
        virtual void start();

        /** \brief Move Piece
        *
        * Tries to moves the piece from (fromX,fromY) to (toX,toY)
        * Outputs an error if the move is illegal or no legal moves are found.
        *
        * @param[in] fromX,fromY The source coordinate.
        * @param[in] toX,toY The destination coordinate.
        */
        virtual void movePiece(int fromX, int fromY, int toX, int toY);

		using Game::legal;

        /** \brief Get legal moves
        *
        * Returns vector of legal MOVEs for the given state using the Breakthrough game rules.
        * @param[in] state The state to find legal moves for.
        * \return Vector of MOVEs
        */
		virtual std::vector<MOVE> legal(GameBoard state);

        /** \brief Winning state
        *
        * Checks if the game is a tie by using Game::winningState().
        * Checks for a winner using the Breakthrough game rules.
        * \returns 2 if the game is a tie, 0 if player 1 wins, 1 if player 2 wins, -1 if noone is a winner.
        */
		virtual int winningState();

		/** \brief Advanced evaluation
        *
        * The advanced evaluation value using piece distances from the goal.
        * \returns The sum of the current player's pieces subtracted by the other player's pieces.
        */
		virtual int advancedEvaluate();
    protected:
    private:
};

#endif // BREAKTHROUGHGAMESMALLER_H
